//
//  ViewController.swift
//  JP-字典转模型
//
//  Created by soulPo on 15/3/4.
//  Copyright (c) 2015年 soulPo. All rights reserved.
//

import UIKit
import JPSwiftDictModel
/**
    1 获取字典
    2 根据字典的内容"创建"相应的需要填充的“模型”类
    3 需要动态的知道模型类的属性
        class_copyPropertyList (基本数据类型只有初始化才能获取到 。 自定义类型 不能获取到)
        class_copyIvarList (能够提取所有属性，不能提取属性类型)
    4 如何能够知道自定义对象的类型
        - MJExtension 速度更快 定义了一个协议， 通过协议告诉“工具”自定义对象的类型
        - JSONModel 功能更全 定义多个协议， 直接高数工具自定义对象的类型
    5 测试子类的模型信息 
        运行时 ， class_copyIvarList 只能获取到当前类的列表 不会获取到父类的列表 
        解决: 利用循环, 循环遍历父类 依次生成父类的属性列表 
        SubModel : 10 + 1 =11
        Model : 10 
        ...
    6 之所以要求模型必须要继承 NSObject 
        1> 可以使用kvc 赋值 如果对象不是继承 NSObject 不能使用kvc 
        2> 翻遍遍历 
    7 拼接字典
    8 性能优化问题 
        -> 一旦类的信息获取到, 就不在重复获取 
            解决: 可以使用缓存字典 记录所有的解析过的模型字典
                [类名: 模型字典, 类名2: 模型字典] 
    9 字典转模型工具的使用范围, 在非常多的界面中 ,都会对网络数据做字典转模型的需求 
        单例: 统一负责应用程序中所有模型转换的工作 

*/
class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        let json = loadJSON()

//        let obj = JPSwiftDictModel.sharedManager.objectWithDictionary(json, modelClass: SubModel.self) as! SubModel
        let obj = JPSwiftDictModel.sharedManager.objectWithDictionary(json as NSDictionary, modelClass: Model.self) as! Model
        
        println("obj.info!.name!!!"+obj.info!.name!)
        println("OTHER")
        for value in obj.other! {
            println(value.name)
        }
        
        println("OTHERS")
        for value in obj.others! {
        
        }
    }
    // 字典转模型 测试模型信息
    func textModel() {
        // 字典转模型工具
        let tools = JPSwiftDictModel.sharedManager
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    ///  序列化方法
    ///
    ///  :returns: 字典
    func loadJSON() -> NSDictionary {
        let path = NSBundle.mainBundle().pathForResource("Model01.json", ofType: nil)
        
        let data = NSData(contentsOfFile: path!)
        
        return NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.allZeros, error: nil) as! NSDictionary
    }

}

